//
// Created by sgyt on 2019/12/26. 022
// umask的设置 默认文件权限  rw- rw- rw- - 022(--- --- -w-) = rw- r-- r--
// umask的设置 设置权限      rw- rw- rw- - 027(--)
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc,char *argv[])
{
    //创建文件
    int fd1 = open("ums.txt",O_RDWR|O_CREAT,0777);
    if(fd1<0)
    {
        perror("open file error");
    }
    //读取文件的权限
    struct stat st1;
    fstat(fd1,&st1);

    //当前用户
    if(st1.st_mode & S_IRUSR)
    {
        printf("ums.txt r");
    }else{
        printf("ums.txt -");
    }
    if(st1.st_mode & S_IWUSR)
    {
        printf("w");
    }else{
        printf("-");
    }
    if(st1.st_mode & S_IXUSR)
    {
        printf("x ");
    }else{
        printf("- ");
    }
    //组用户权限
    if(st1.st_mode & S_IRGRP)
    {
        printf("r");
    }else{
        printf("-");
    }
    if(st1.st_mode & S_IWGRP)
    {
        printf("w");
    }else{
        printf("-");
    }
    if(st1.st_mode & S_IXGRP)
    {
        printf("x ");
    }else{
        printf("- ");
    }
    //其他用户权限
    if(st1.st_mode & S_IROTH)
    {
        printf("r");
    }else{
        printf("-");
    }
    if(st1.st_mode & S_IWOTH)
    {
        printf("w");
    }else{
        printf("-");
    }
    if(st1.st_mode & S_IXOTH)
    {
        printf("x");
    }else{
        printf("-");
    }

    printf("\n");
    //设置为0027
    umask(0001);
    int fd2 = open("ums1.txt",O_RDWR|O_CREAT,0777);
    if(fd2<0)
    {
        perror("open file error");
    }
    struct stat st2;
    fstat(fd2,&st2);
    //当前用户
    if(st2.st_mode & S_IRUSR)
    {
        printf("ums1.txt r");
    }else{
        printf("ums1.txt -");
    }
    if(st2.st_mode & S_IWUSR)
    {
        printf("w");
    }else{
        printf("-");
    }
    if(st2.st_mode & S_IXUSR)
    {
        printf("x ");
    }else{
        printf("- ");
    }
    //组用户权限
    if(st2.st_mode & S_IRGRP)
    {
        printf("r");
    }else{
        printf("-");
    }
    if(st2.st_mode & S_IWGRP)
    {
        printf("w");
    }else{
        printf("-");
    }
    if(st2.st_mode & S_IXGRP)
    {
        printf("x ");
    }else{
        printf("- ");
    }
    //其他用户权限
    if(st2.st_mode & S_IROTH)
    {
        printf("r");
    }else{
        printf("-");
    }
    if(st2.st_mode & S_IWOTH)
    {
        printf("w");
    }else{
        printf("-");
    }
    if(st2.st_mode & S_IXOTH)
    {
        printf("x");
    }else{
        printf("-");
    }



    return 1;
}
